{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Qiskit basics\n", "\n", "Qiskit is an open-source framework for working with quantum computers. It is maintained and developed by IBM. It provides tools for creating, manipulating and simulating quantum circuits. Qiskit also includes libraries for different quantum algorithms. It has a developer community (available on Slack) and detailed documentation (Qiskit documentation).

\n", "\n", "The foundation of the Qiskit is module Terra, which provides the essential tools to build and run quantum circuits. In addition, Terra defines the interfaces for an end-user experience and the layers of optimization, pulse scheduling, and backend communication. The detailed and more comprehensive tutorial can be found here.\n", "\n", "\n", "\n", "Aer module has different emulators that can imitate the working quantum computer. Aer provides a high-performance emulator framework for quantum circuits using the Qiskit software stack. It contains optimized C++ emulator backends for executing circuits compiled in Terra.\n", "\n", "\n", "To create a quantum circuit, we need to create an instance of the `QuantumCircuit` class and specify the number of qubits.\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-10-07T13:15:58.026026Z", "start_time": "2024-10-07T13:15:57.672165Z" } }, "outputs": [ { "data": { "text/plain": " \nq_0: \n \nq_1: \n \nq_2: \n \nq_3: \n ", "text/html": "
     \nq_0: \n     \nq_1: \n     \nq_2: \n     \nq_3: \n     
" }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from qiskit import QuantumCircuit\n", "\n", "circuit = QuantumCircuit(4) # Create a QuantumCircuit object with 4 qubits\n", "circuit.draw() # Visualize the circuit (now, it is an empty circuit, but one should notice that the designation of the qubits starts from zero)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After creating the empty circuit with its quantum registers, we can add the operators (gates) to develop and execute the circuit. In Qiskit, operators can be added to the circuit one by one. The complete list of available gates and their usage can be found in Qiskit's documentation.\n", "\n", "For instance, see: qiskit gates.\n", "\n", "It is important to note that the gates (operators) are added to the circuit as a method call on the same circuit (QuantumCircuit) object." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-10-07T13:16:00.025410Z", "start_time": "2024-10-07T13:16:00.019881Z" } }, "outputs": [ { "data": { "text/plain": " ┌───┐ ░ ┌─┐ \n q_0: ┤ X ├──────░─┤M├─────────\n └───┘ ░ └╥┘┌─┐ \n q_1: ───────────░──╫─┤M├──────\n ┌───┐ ░ ║ └╥┘┌─┐ \n q_2: ┤ H ├──■───░──╫──╫─┤M├───\n └───┘┌─┴─┐ ░ ║ ║ └╥┘┌─┐\n q_3: ─────┤ X ├─░──╫──╫──╫─┤M├\n └───┘ ░ ║ ║ ║ └╥┘\nmeas: 4/══════════════╩══╩══╩══╩═\n 0 1 2 3 ", "text/html": "
        ┌───┐      ░ ┌─┐         \n   q_0: ┤ X ├──────░─┤M├─────────\n        └───┘      ░ └╥┘┌─┐      \n   q_1: ───────────░──╫─┤M├──────\n        ┌───┐      ░  ║ └╥┘┌─┐   \n   q_2: ┤ H ├──■───░──╫──╫─┤M├───\n        └───┘┌─┴─┐ ░  ║  ║ └╥┘┌─┐\n   q_3: ─────┤ X ├─░──╫──╫──╫─┤M├\n             └───┘ ░  ║  ║  ║ └╥┘\nmeas: 4/══════════════╩══╩══╩══╩═\n                      0  1  2  3 
" }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "circuit.h(2) # Add a H (Hadamard) gate on qubit 3\n", "circuit.cx(2, 3) # Add a CX (CNOT) gate on control qubit 3, and target qubit 4\n", "circuit.x(0) # Add Pauli X gate on the first qubit\n", "circuit.measure_all()\n", "circuit.draw() # Draw the circuit" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-10-07T13:16:01.864093Z", "start_time": "2024-10-07T13:16:01.302360Z" } }, "outputs": [ { "data": { "text/plain": "
", "image/png": "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uXIF48aNM7p0wNWrV/HCCy/g1KlTNcZtabVavPPOO7h79y7s7e0RFmZ8fStL42znREREjcMB6A1s12g0mDBhgmFSzg4dOsDLywslJSW4ceMGiourxhElJyejc+fOAID79++jZ8+euH79OmxsbNCpUyfodDokJydDpVJh7ty5WLJkSY0B6ElJSXjssap1m5ydnREUFASFQoGMjAzDGKvNmzfjL3/5i1nfH1NwtnMiIqLGY8tUAzw8PHDs2DF88sknGD58OIqLi3H27Fmkp6cjODgYMTExOHbsGEJCQgzHODs748SJE5g5cyZcXV2RkpJiWA7m/Pnz8PHxqXWdkJAQfPjhh3j66aehUqlw8+ZNXLx4Efb29pg8eTISEhJECVIAUFpWDj/vtmyVIiIiaoQW0zJFlldaVv5Irh1GRERkCoYpIiIiIgHYzUdEREQkAMMUERERkQAMU0REREQCMEwRERERCcAwRURERCQAwxQRERGRAAxTRERERAIwTBEREREJwDBFREREJADDFBEREZEADFNEREREAjBMEREREQnAMEVEREQkAMMUERERkQAMU0REREQCMEwRERERCcAwRURERCQAwxQRERGRAAxTRERERAIwTBEREREJwDBFREREJADDFBEREZEADFNEREREAjBMEREREQnAMEVEREQkAMMUERERkQAMU0REREQCMEwRERERCcAwRURERCQAwxQRERGRAAxTRERERAIwTBEREREJwDBFREREJADDFBEREZEADFNEREREAjBMEREREQnAMEVEREQkAMMUERERkQAMU0REREQC/H9L31QGxgyb+AAAAABJRU5ErkJggg==" }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "circuit.draw('mpl') # Drawing a circuit using matplotlib (prettier drawing)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using Qiskit's `Aer` module, we can get the results of a perfect simulation of the desired quantum circuit. It means we will get the results without noise or errors, which is invalid for a real quantum computer in the NISQ era.\n", "\n", "To perform a simulation using the Aer emulator, first, we must choose which backend will be used. In this context, the backend represents the machine for executing our circuit.\n", "\n", "In this example, the quantum circuit will run on a `statevector` emulator backend which will execute on the local machine. After choosing the backend, we run the circuit by calling the `run()` method, which returns a `job` object that encapsulates all the necessary information about the circuit submitted for execution." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-10-07T13:16:10.033475Z", "start_time": "2024-10-07T13:16:09.974620Z" } }, "outputs": [], "source": [ "from qiskit_aer import AerSimulator\n", "\n", "backend = AerSimulator() \n", "job = backend.run(circuit)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `job` object created after running the circuit on some backend has two essential methods. One is `status()`, which returns the status of the job, and the other is `result()`, which returns the job's result. Knowing that the job runs asynchronously is crucial, so we do not get the results automatically but have to wait for them.\n", "\n", "There are two possible approaches for getting the result of one job:\n", "- Call the `status()` method to check the current status of a job. If the status of a job is finished, we can get its results; if not, we can wait some time and recheck the status until the job is finished. In the end, we can get the job results.\n", "- Call the `result()` function, which will block while it waits for a job to finish. It will return when the job finishes its execution. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-10-07T13:16:12.278360Z", "start_time": "2024-10-07T13:16:12.269247Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Counts: {'1101': 503, '0001': 521}\n", "Statevector: {'1101': 503, '0001': 521}\n" ] } ], "source": [ "from qiskit.providers import JobStatus\n", "import time\n", "\n", "# First approach\n", "job_final_states = [JobStatus.DONE, JobStatus.ERROR, JobStatus.CANCELLED]\n", "def get_job_result(job_obj):\n", " status = job_obj.status()\n", " if status in job_final_states:\n", " return job_obj.result()\n", " time.sleep(1)\n", "\n", "result = get_job_result(job)\n", "print(f\"Counts: {result.get_counts(circuit)}\")\n", "\n", "# Second approach\n", "result = job.result()\n", "print(f\"Statevector: {result.get_counts(circuit)}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### OpenQASM\n", "We can obtain the quantum circuit's OpenQASM format using the Qiskit library.\n", "\n", "OpenQASM stands for the Open Quantum Assembly Language developed by IBM. It is a textual language that describes quantum circuits implemented on a quantum computer or simulated on a classical computer. It is a low-level language that allows quantum algorithms to be expressed in a way that is independent of the specific hardware being used.\n", "\n", " `qasm() `in Qiskit should convert our quantum circuit to the QASM format, but its functionality has known problems. For example, it could be possible that the obtained QASM string is wrong, especially for the larger circuits, so we need to pay attention when using this method and verify its results." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-10-07T13:16:43.327926Z", "start_time": "2024-10-07T13:16:43.319857Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "OPENQASM 2.0;\n", "include \"qelib1.inc\";\n", "qreg q[4];\n", "creg meas[4];\n", "h q[2];\n", "cx q[2],q[3];\n", "x q[0];\n", "barrier q[0],q[1],q[2],q[3];\n", "measure q[0] -> meas[0];\n", "measure q[1] -> meas[1];\n", "measure q[2] -> meas[2];\n", "measure q[3] -> meas[3];\n" ] } ], "source": [ "from qiskit.qasm2 import dumps\n", "qasm_str = dumps(circuit)\n", "print(qasm_str)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-10-07T13:16:46.780867Z", "start_time": "2024-10-07T13:16:46.640525Z" } }, "outputs": [ { "data": { "text/plain": "
", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAAFvCAYAAABuEU6jAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABEsElEQVR4nO3deVzU1f4/8Ncs7IKyKQOIbKKIqLngnunFBddraNk1tfRmXrWo60/smn1Nr9f9VlfNsltZWZEVLe65K9pVccFcEFCB2EYbQRRknZnfH1zmSgzLzGfm8wF8PR+PHjHz2d6DMLzmnPM5R6bX6/UgIiIiIrPIpS6AiIiIqDljmCIiIiISgGGKiIiISACGKSIiIiIBGKaIiIiIBGCYIiIiIhKAYYqIiIhIAIYpIiIiIgEYpoiIiIgEYJgiIiIiEoBhioiIiEgAhikiIiIiARimiIiIiARgmCIiIiISgGGKiIiISACGKSIiIiIBGKaIiIiIBGCYIiIiIhKAYYqIiIhIAIYpIiIiIgEYpoiIiIgEYJgiIiIiEoBhioiIiEgAhikiIiIiARimiIiIiARgmCIiIiISgGGKiIiISACGKSIiIiIBlFIXQETNW2Jiokn7azQafPfdd3jyySfh4eHRqGP69OljTmlERKJgyxQRiUqj0eDDDz+ERqORuhQiIotgmCIiIiISgGGKiIiISACGKSIiIiIBGKaISFTOzs4YNWoUnJ2dpS6FiMgiZHq9Xi91EUTUfJl6N585eDcfETVlbJkiIlGVlZUhKysLZWVlUpdCRGQRDFNEJKr09HRER0cjPT1d6lKIiCyCk3aSUXq9Hg9KKqUuwySODkrIZDKpy6AWQq/XQ6vVSl2GSRQKBX8HiCTAMEVGPSipRKt+n0ldhkmKTk2Hk6ON1GVQC6HVahEfHy91GSaJjo6GUsm3dSKxsZuPiIiISACGKSIiIiIB2B5MRKLq3Lkzzpw5I3UZREQWw5YpIiIiIgEYpohIVJmZmZg5cyYyMzOlLoWIyCIYpohIVCUlJbh8+TJKSkqkLoWIyCIYpoiIiIgEYJgiIiIiEoBhioiIiEgAhikiEpVKpcKyZcugUqmkLoWIyCIYpohIVK1bt0ZUVBRat24tdSnNTmpqarNbL5DoUcBJO4lIVAUFBTh48CAiIyPh6uoqdTlWpdPpcOXKFVy/fh3p6enIyspCaWkpAMDOzg6+vr4IDAxEUFAQwsLC6l1X79SpU9iwYQP69++PuXPnQqFQiPUyiKgBDFNEJKpbt25h3bp1CA8Pb7Fh6u7duzhy5AgOHToEjUZT535qtRpnz54FALi6umLYsGH4wx/+ADc3txr7VQcpnU6HkydPIiwsDMOGDbPqayCixmM3nwg0Gg1iY2MRHBwMe3t7tG/fHjExMSguLsasWbMgk8mwadMmqcskIoF0Oh3279+PmJgYbN++vVaQsrOzg5ubG9zc3GBnZ1djW0FBAeLj4xETE4Pdu3dDp9MBqBmkAOCJJ57AE088IcrrIaLGYcuUlSUlJSEqKgpqtRpOTk7o0qULcnNzsWHDBty4cQP5+fkAgB49ekhbqJX84+VeWPznHpj5f8ex9Ye0WtuPfDQa/bu3Ra8pP+LK9QIJKiSyjPz8fLz77ru4cuWK4TmZTIbHHnsM/fr1Q1BQEFQqFeTyqs+wOp0OarUaN2/exOnTp3H27Fno9XpUVFRg27ZtOHPmDAYMGIBPP/20RpCaPXu24RxE1DQwTFmRRqPBuHHjoFarsWDBAixduhTOzs4AgLVr12LRokVQKpWQyWTo1q2bxNVax5ubL2DcED+89f/6Yv9/cpBz64Fh2yvPhuGJPiq89k4igxQ1a2q1GitWrKjREjV06FBMnDgRbdu2NXqMXC6Ht7c3vL29MWjQIGg0GuzYsQP79+8HAKSkpCAlJcWwP4MUUdPF30orevnll5GdnY358+dj/fr1hiAFALGxsejevTsqKyvh7+8PFxcXCSu1nopKHWYsOQ4nBxt89OZgw/Mh/q3xj5d649Qvt7Huk0sSVkhic3R0RN++feHo6Ch1KRZx586dGkHKzc0Nf/vb3/Diiy/WGaSM8fDwwMyZM7F06dJa7wd9+/ZlkCJqwvibaSXJycnYvn07PDw8sGrVKqP79OrVCwDQvXv3Gs+np6dj/PjxcHZ2hqurK6ZPn447d+5YvWZruZB8B6s+uoiRA33xQnQnyOUyfPaPxyGTATOWHIdOp5e6RBKRn58fNm7cCD8/P6lLEUyn02HDhg2GIOXr64t//OMftX6nTVFYWIiioqIaz6nVakNXHxE1PQxTVhIXFwedToepU6eiVatWRvdxcHAAUDNM3b9/H0OHDkV2djbi4uLwwQcfICEhAWPHjm3Wb6Z//+ACkq7dwfoFEdj4t/7oG94Wr288h9SMQqlLI5FptVoUFRW1iPmS9u7da+iK8/T0xJIlSwTdofj7webVrXeZmZn48ccfhRdMRFbBMGUlhw8fBlA1bqIu2dnZAGqGqQ8++AA5OTn44YcfMHbsWEyePBlffvklTp06hR07dli3aCuqrNRjxpLjsLdTYO7ToUg4r8Y7n1+WuiySQFpaGoYNG4a0tNo3JDQnv/32G7766ivD47lz56JNmzZmn8/YXXuLFy82dO199913yMnJEVQzEVkHB6BbSWZmJgCgQ4cORrdXVlbi5MmTAGqGqV27dmHQoEE1ukD69++PwMBA7Ny5E3/84x9NrqV3795Qq9UmHaODDeC2xORr1aewqBxl5VrY2iiwJyELegv37nUMCYEcFZY9KTVo0qRJJu1/+/ZtAFWtOufOnWvUMRMnTjS5LqFsbW3r7KIHgP3796OiournbdSoUQgNDTX7WsaCVPUYqQkTJuD777+HVqvFvn37MGvWrDrPExISgvLycrPrIHqUeXl5GeZ9MxXDlJUUFxcDAEpKSoxur56DxtnZGQEBAYbnr169ismTJ9faPywsDFevXjWrFrVabfonWpkt4NbwbqbYunwwbG0UuHqjAEtm98DXP6XjZvZ9i50/LzcX0PMPidiqf9Ybq/p3oqSkpNHHStEi8/t5oB5WXl6Oo0ePAgCUSqWgsFdfkAKAcePGYc+ePSgrK0NCQgKeeeaZOgfv5+bmoqyszOxaiMg8DFNW4uXlhYKCApw/fx79+/evsS0vLw8LFy4EAHTr1g0ymcywraCgwGhXgZubW43bpE2txVQ62CDPrKsZ99KfumBohDcWbziLH49k4vz2P+Lj5YPxxMw9FruGytubLVMScHJyMmn/6gDl4ODQ6GN9fHxMrksoW1vbOredO3cO9+9XfRDo16+f2esMNhSkgKpxU4MHD8bBgwdRWlqKU6dO1Tn7ube3N1umiMxkzt/KagxTVhIZGYnk5GSsWbMGw4cPR0hICAAgMTER06ZNM9z9I8ZkneY0WxY/qECrfp9Z5PrBfi5YFdMbZy79hjUf/wKdTo833zuPVTF98NKfumDjl+a1uP1eWmoqnBxtLHIuarzExEST9r927Rri4uIQFRWFzp07N+qYd955x4zKhKmsrER8fLzRbampqYavBw4caNb5GxOkHr7GwYMHAQDXr1+vM0ylpqbWu74fEVkHB6BbSWxsLNzd3ZGVlYWwsDCEh4ejY8eOiIiIQGBgoOHN8Pe3ULu6uuLu3bu1zpefn19rva7mQCYDPvn741DIZZix5JhhGoS1Wy8h8fJvWBXTG4G+zg2chVqS4OBg/PTTTwgODpa6FLOlp6cbvg4KCjL5eFOCFAAEBAQYWrBv3rxpRsVEZE0MU1bi6+uLhIQEjBkzBvb29sjIyICbmxu2bNmC3bt3Gz7Z/j5MhYaGGh0bdfXqVUEDXKWyYEY4Bj7WDv+3+Tyupf9vGgSdTo/n3jgOpUKOj5cPrucM1NIolUq4uro26xaUX3/9FQDg7u5u8oS7pgYpALC3tzd0dWZlZTXraVKIWiKGKSsKDQ3Frl27cP/+fdy/fx+nT5/G7NmzUVxcjIyMDMjlcnTt2rXGMWPHjsWJEycM0yYAwOnTp3Hjxg2MGzdO7JcgSOeA1vj7vJ74z8Xb+OentadBuHrjLt587zyG9FbhpT91kaBCkkJ2djYWLFhQ42e8OdHr9YZB9KZOhWBOkKpWPS5Lq9VyXBRRE9N8Pxo2Y1euXIFer0dISEitu3Jmz56NjRs3YsKECVi2bBlKS0sRGxuLiIgITJgwQaKKzXMtvRAOfT6td5/VH/2C1R/9IlJF1BQUFRUhISEBL7zwgtSlmG3z5s2GaRFMkZaWZvaixX/5y1+g1Wpha2tb7+B4IhIfw5QELl2qWovO2JITLi4uOHz4MGJiYjBlyhQolUqMHTsWb7/9NtflImoCZDKZ2bOcP/vss9DpdCgpKTF5rT0PDw+zrklE1scwJYH6whRQNaB1165dYpZERCKQyWSYPn069Ho9PxwRtSAMUxJoKEwRUcslk8lqzC1HRM0fw5QEqtftI3oUeXp6IiYmBp6enlKXQkRkEQxTRCQqd3d3TJ06VeoyiIgshp32RCSqe/fu4eDBg7h3757UpRARWQTDFBGJKjc3F4sXL0Zubq7UpRARWQTDFBEREZEADFNEREREAjBMEREREQnAMEVEorKzs0OnTp1gZ2cndSlERBbBqRGISFQBAQHYtm2b1GUQEVkMW6aIiIiIBGCYIiJRpaSkYODAgUhJSZG6FCIii2CYIiJR6fV6VFRUQK/XS10KEZFFcMwUGeXooETRqelSl2ESRwf+OJPlKBQKREdHW+x867Zsx/3iYjg7OWHhi0/XemwJCoXCIuchItPwrw8ZJZPJ4ORoI3UZRJKRyWRQKi33FqkHoNNX/V+pVNZ6TETNF7v5iIiIiATgxyEiEpW/vz/i4uLg4+MjdSlERBbBMEVEorK3t0dQUJDUZRARWQy7+YhIVHl5eVixYgXy8vKkLoWIyCIYpohIVIWFhdixYwcKCwulLoWIyCIYpoiIiIgEYJgiIiIiEoBhioiIiEgAhikiEpVcLsdjjz0GuZxvP0TUMvDdjIhEpdPpcOHCBeh0OqlLISKyCIYpIiIiIgEYpoiIiIgEYJgiIiIiEoBhiohE5ezsjFGjRsHZ2VnqUoiILIJr8xGRqHx8fLB8+XKpyyAishi2TBGRqMrKypCVlYWysjKpSyEisgiGKSISVXp6OqKjo5Geni51KUREFsFuPiIiqkWv10Or1UpdhkkUCgVkMpnUZdAjiGGKiIhq0Wq1iI+Pl7oMk0RHR0Op5J81Eh+7+YiIiIgEYJgiIiIiEoDtoUQkqs6dO+PMmTNSl0FEZDFsmSIiIiISgGGKiESVmZmJmTNnIjMzU+pSiIgsgmGKiERVUlKCy5cvo6SkROpSiIgsgmGKiIiISACGKSIiIiIBGKaIiIiIBGCYIiJRqVQqLFu2DCqVSupSiIgsgvNMEZGoWrdujaioKKnLoGZIr9dDr9dDLmc7ADUtDFNEJKqCggIcPHgQkZGRcHV1lbocEkF5eTkyMzNx8+ZN3Lt3D5WVlbCxsYG7uzsCAwPh4+PT4Jp6er0en3/+Oe7evYu5c+dCoVCIVD1RwximiEhUt27dwrp16xAeHs4w1YJVVFTg9OnTOHDgANLS0qDT6erc18bGBt26dcOIESMQHh5eq+WpOkjt3r0bACCTyTBv3jzIZDKrvgaixmJbqQg0Gg1iY2MRHBwMe3t7tG/fHjExMSguLsasWbMgk8mwadMmqcskIhJMp9Nhz549mDdvHjZt2oSUlJR6gxRQFbzOnTuHVatW4a9//WuN5YaMBamwsDAGKWpS2DJlZUlJSYiKioJarYaTkxO6dOmC3NxcbNiwATdu3EB+fj4AoEePHtIWSkQkUF5eHt5//32kpKTUeF6lUqFTp04ICAhAu3btoFAoUF5ejtzcXKSnpyM5ORkFBQUAALVajbfeegsDBgzAc889hx9//LFGkJo9ezaGDh0q+msjqg/DlBVpNBqMGzcOarUaCxYswNKlS+Hs7AwAWLt2LRYtWgSlUgmZTIZu3bpJXC0Rkfl++eUX/POf/0RZWZnhuX79+mHkyJHo3Lmz0ZakXr16AQC0Wi3OnTuHffv24erVqwCAn3/+GefPn0dpaSkABilq2himrOjll19GdnY25s+fj/Xr19fYFhsbiy+//BIXL15EQEAAXFxcJKqSSFyOjo7o27cvHB0dpS6FLOTixYtYt24dKisrAQBt27bFX/7yF4SGhjbqeIVCgYiICPTp0wcnTpzA1q1b8eDBAwYpajY4ZspKkpOTsX37dnh4eGDVqlVG96n+VNa9e3fDc9XhKyIiAnZ2dhwXQC2On58fNm7cCD8/P6lLIQvIysrCW2+9ZQhSffr0wdq1axsdpB4mk8kwaNAg9O/fv8bzTk5OiIiIsEi9RNbAMGUlcXFx0Ol0mDp1Klq1amV0HwcHBwA1w9T169cRHx8PLy8v9OnTR5RaicSk1WpRVFQErVYrdSkkkFarxXvvvWfo2ouIiMArr7wCe3t7s85XPdj80KFDNZ4vKirCtm3bBNdLZC0MU1Zy+PBhAKi3WTo7OxtAzTD1+OOPIy8vDzt27EBkZKR1iySSQFpaGoYNG4a0tDSpSyGBdu7ciZs3bwIAfHx8MH/+fLPnfzJ2197UqVMNHzqPHj2KCxcuWKZwIgvjmCkryczMBAB06NDB6PbKykqcPHkSQM0wZY2ZfXv37g21Wm3x8xIBwKRJk0za//bt2wCAvXv34ty5c406ZuLEiSbX1dRMfP4VOLVyQZ46D76+vrUeNzW2trZ1DlEAgAcPHuCHH34AUBV85syZA1tbW7OuZSxIVY+RcnJywgcffAAA2L59O3r06FHn8IeQkBCUl5ebVQORl5cXzp49a9axDFNWUlxcDAAoKSkxun379u3QaDRwdnZGQECAVWtRq9XIycmx6jXo0VX9s95Y1b8TJSUljT62Jfz86v7branTapGTk1PrcVNjZ2dX7/YTJ04YBogPHToUHTt2NOs69QWp6nMfPHgQN2/eREZGBtLS0hASEmL0XLm5uTXuJiQSC8OUlXh5eaGgoADnz5+vNZgyLy8PCxcuBAB069bN6oPMvby8rHp+erQ5OTmZtH91gHJwcGj0sT4+PibX1dTI/9v9JVco4OPjU+txU9NQK9OBAwcMX48cOdKsazQUpKqfGzlyJN577z0AwP79++sMU97e3myZIrMJ+VvJMGUlkZGRSE5Oxpo1azB8+HDDL39iYiKmTZsGjUYDQJzJOs1ttiRqjMTERJP2v3btGuLi4hAVFYXOnTs36ph33nnHjMqalpXvfoF7RcVQeamQnZ1d63FTU1lZifj4eKPb8vPzkZWVBQAIDg6uczhDfRoTpKr1798fn376KR48eIBLly5Br9cb/RCampra4Bp/RNbAAehWEhsbC3d3d2RlZSEsLAzh4eHo2LEjIiIiEBgYiGHDhgGoOV6K6FEQHByMn376CcHBwVKXQmZKT083fG3OFAimBCmgqpUsKCgIAFBYWGhYOYKoqWCYshJfX18kJCRgzJgxsLe3R0ZGBtzc3LBlyxbs3r0bqampABim6NGjVCrh6urKFoRm7OEwFRgYaNKxpgYpY9epvoOQqKngu5kVhYaGYteuXbWeLyoqQkZGBuRyObp27SpBZUTSyc7Oxttvv41XX321Sd7FRg2rXkcPqFp3r7HMDVK/v87D1ydqChimJHDlyhXo9XqEhIQYXVLj22+/BQDDGlXVj/39/dG7d2/xCiWygqKiIiQkJOCFF16QuhQyU69evdCmTRtUVFSgTZs2jT7u3LlzZi9a3KFDB0yYMKFGlx9RU8EwJYFLly4BqLuLb/LkyUYfz5gxA5988olVayMiakjPnj3Rs2dPk4/r1asXRo0ahZ9++snktfYCAgKsPo0MkbkYpiTQUJjS6/VilkNEJAqZTIYZM2ZgwIABdU5vQNQccQC6BBoKU0RELZVMJmOQohaHLVMSqF63j+hR5OnpiZiYGHh6ekpdChGRRTBMEZGo3N3dMXXqVKnLICKyGHbzEZGo7t27h4MHD+LevXtSl0JEZBEMU0QkqtzcXCxevBi5ublSl0JEZBEMU0REREQCMEwRERERCcAwRURERCQAwxQRicrOzg6dOnWCnZ2d1KUQEVkEp0YgIlEFBARg27ZtUpdBRGQxbJkiIiIiEoBhiohElZKSgoEDByIlJUXqUoiILIJhiohEpdfrUVFRwQW9iajF4JgpIiKqRaFQIDo62mLnW7dlO+4XF8PZyQkLX3y61mNLUCgUFjkPkakYpoiIqBaZTAal0nJ/IvQAdPqq/yuVylqPiZozdvMRERERCcCPA0QkKn9/f8TFxcHHx0fqUoiILIJhiohEZW9vj6CgIKnLICKyGHbzEZGo8vLysGLFCuTl5UldChGRRTBMEZGoCgsLsWPHDhQWFkpdChGRRTBMEREREQnAMEVEREQkAMMUERERkQAMU0QkKrlcjsceewxyOd9+iKhl4LsZEYlKp9PhwoUL0Ol0UpdCRGQRDFNEREREAjBMEREREQnAMEVEREQkAMMUEYnK2dkZo0aNgrOzs9SlEBFZBNfmIyJR+fj4YPny5VKXQURkMWyZIiJRlZWVISsrC2VlZVKXQkRkEQxTRCSq9PR0REdHIz09XepSiIgsgmGKiIiISACOmSKj9Ho90Ny6YezsIJPJpK6CiFoIvV4PrVYrdRkmUSgUfB+UAMMUGVdWhsqnZkhdhUmUX38K2NtLXQYRtRBarRbx8fFSl2GS6OhoKJX80y42dvMRERERCcD4SkSi6ty5M86cOSN1GUREFsOWKSIiIiIBGKaISFSZmZmYOXMmMjMzpS6FiMgiGKaISFQlJSW4fPkySkpKpC6FiMgiGKaIiIiIBGCYIiIiIhKAYYqIiIhIAIYpIhKVSqXCsmXLoFKppC6FiMgiOM8UEYmqdevWiIqKkroMIiKLYcsUEYmqoKAA33zzDQoKCqQuhUhUOp0O+fn5UKvVuH37NoqLi006vrS0FD/++GOzWy/wUcCWKSIS1a1bt7Bu3TqEh4fD1dVV6nKIrEav1yM1NRWnTp3CzZs3kZGRgbLfLSDv4eGBgIAAdOrUCY8//jhcXFyMnqu0tBRr1qxBcnIyfv31V8ydOxcKhUKMl0GNwDBFRERkQVqtFkeOHMH+/fvx66+/1ruvRqOBRqNBYmIivvrqK/Tr1w9jx46Fv7+/YZ+HgxQAXLhwAbdu3YK3t7c1XwaZgN18ItFoNIiNjUVwcDDs7e3Rvn17xMTEoLi4GLNmzYJMJsOmTZukLtPijmluw3bn13jrxrU697Hd+TX+eDpBxKrEl3u7GH/fcgFP/b/DGP/SATz/xnHsOJIJrVYndWlEZEFZWVl444038OGHH9YKUp6enujVqxcGDRqEAQMGoHPnzrC3tzdsr6ysxIkTJ7B48WJ89dVXqKioqBWkHB0d8frrrzNINTFsmRJBUlISoqKioFar4eTkhC5duiA3NxcbNmzAjRs3kJ+fDwDo0aOHtIWSxWkKSjFv5c+IP5gBrVZfY9snP6bBT+WEv8/rhenjO0pUIRFZyr59+/D555+jsrLS8FzHjh0xfPhwPPbYY3B2dq51jE6nQ05ODo4fP44jR46gqKgIOp0OP/zwA86cOQMHBwfcuHEDwP+CVFBQkGiviRqHYcrKNBoNxo0bB7VajQULFmDp0qWGX6i1a9di0aJFUCqVkMlk6Natm8TVkiXl/fYAQ2buRlrmvTr3+TWvGDOWHEf2rWIsfqGHeMVJyNHREX379oWjo6PUpRBZTHx8PL755hvDY29vb7z44ovo1KlTvcfJ5XK0b98eU6dOxeTJk7Fr1y7Ex8dDq9UiNzfXsB+DVNPGbj4re/nll5GdnY358+dj/fr1NT6ZxMbGonv37qisrIS/v3+dAw+p+dHp9Bj/8oF6g9TDXt94Dt/sT7dyVU2Dn58fNm7cCD8/P6lLIbKIPXv21AhSo0ePxurVqxsMUr9na2uLJ598Em+++SZsbW0Nz8tkMsybN49BqgljmLKi5ORkbN++HR4eHli1apXRfXr16gUA6N69u+G5b7/9FtHR0ejQoQMcHR3RuXNnvP766ygqKhKlbmt4oNVCU1Zm9L+W6KeT2Th7RWPSMf/4dxL0en3DOzZzWq0WRUVFvL2bWoT09HR88cUXhsfTpk3D9OnTa4QhU5SWluLLL79EeXm54Tm9Xo89e/ZAp+MYy6aK3XxWFBcXB51Oh6lTp6JVq1ZG93FwcABQM0ytX78efn5+WLlyJXx9fZGUlIRly5bh2LFjOH78OOTy5peBl6dcwfKUK1KXIZrN25NNPuZiSj7+c/E2BvRoZ4WKmo60tDRMnz4dn332GTp37ix1OURmq6ysxHvvvWf4YDB+/HiMGTPG7PP9frC5g4MDbG1tUVhYiCtXruDgwYMYMWKERWony2KYsqLDhw8DAIYOHVrnPtnZ2QBqhqmdO3fC09PT8HjIkCHw9PTE1KlTceLECTz++ONWqth6/uwXiGjv9ka3RZ06JnI11qXX67Hv52yzjt17IrvFhymilmLfvn2GO/Y6dOiAp556yuxz1XXXXnFxMVauXAkA+OKLLzBgwIA6P5yTdBimrCgzMxNA1S+ZMZWVlTh58iSAmmHq4SBVrXfv3gCAnJwck+vo3bs31Gq1Scc4yOW42qO/ydeqS3CrVviDp3VDQkhICEqaQDO4DjaodFti1rFvb3gfW1fvtXBF1jVp0iST9r99+zYAYO/evTh37lyjjpk4caLJdTU1E59/BU6tXJCnzoOvr2+txy1dc3z9tra2dQ7R0Ol02L9/v+HxnDlzoFSa9ye1riBVPUbqiSeewNGjR1FWVoZjx47V2/oVEhJSo4uQGs/Lywtnz54161iGKSuqXiqgpKTE6Pbt27dDo9HA2dkZAQEB9Z7ryJEjAIDQ0FCT61Cr1SaHMEeFAuhh8qUklZubiwdNYhyODHDVATLTu2OL7+Wj+JbpgVlKpi6JUf37UFJS0uhjzfkQ0dTo/vuzqdNqkZOTU+txS9ccX7+dnV2d2y5evGj4YNC9e/cG38Pr0lCQAqq6D48ePQoAOHDgAKKiouoc7pGbm1trlnWyPoYpK/Ly8kJBQQHOnz+P/v1rtvLk5eVh4cKFAIBu3bpBJpPVeZ6cnBy88cYbGDVqlFlzUXl5eZl8jEMzHJfl7e3dJFqmAOC2NhcVStM/bbs5FMLBx8cKFVmPk5OTSftXBygHB4dGH+vTzL4nxsj/u/SHXKGAj49PrcctXXN8/fUNIq/uVQCA4cOHm3X+xgQpoOq9rWvXrrh8+TLUajVu3ryJ4OBgo+f09vZmy5SZzPlbWY1hyooiIyORnJyMNWvWYPjw4QgJCQEAJCYmYtq0adBoqu72qi8gFRUVYcKECbC1tcXHH39sVh3mNFvqS0tR+dQMs64nldTUVMgemk1YSp/8mIrn3zBtVnefto7IOL8fSmXzCrKJiYkm7V9ZWYnnnnsOzs7Oje4Weeedd8yorGlZ+e4XuFdUDJWXCtnZ2bUet3TN8fVXVlYiPj7e6LabN28CAJRKpVkfchsbpKr17t0bly9fNly7rjCVmppqdncjma95vWs3M7GxsXB3d0dWVhbCwsIQHh6Ojh07IiIiAoGBgRg2bBiAmuOlHlZSUoJx48YhPT0d+/fvh0qlErN8EuDpkYHw8nAw6ZiX/tSl2QUpcyiVSri6uvINn5qtkpIS5OXlAaiaN83Un2VTgxQABAYGGr6uDnLUdLT8d24J+fr6IiEhAWPGjIG9vT0yMjLg5uaGLVu2YPfu3UhNTQVgPExVVFRg0qRJOHv2LPbu3YsuXbqIXT4J4GCvxI4Nw+Hk0Lg32Yl/6ID/NyPcylU1DdnZ2ViwYEGTbY0gakheXp5hTri6bjCqizlB6vfXaapjzB5l/GhoZaGhodi1a1et54uKipCRkQG5XI6uXbvW2FY9N9WhQ4ewZ88eREREiFWuxQ3xaIvycfXfLtzQ9uaqT1dPHNs6BpP+eggZucYnXJXLZZgd3QkbXusPheLR+GxTVFSEhIQEvPDCC1KXQmS2tm3boqKiAm5ubo0+pry83KwgBVQNhndzc4NMJuNqGU0Qw5RErly5Ar1ej5CQkFprlM2bNw/ffPMNXnvtNTg6OuLUqVOGbUFBQUanTqCmqVcXD1zfPRl7ErLx/jfJ+OlkDrQ6PZQKGWKf74YXJ3eGn4pzxhA1J4GBgdiwYYPJx9nY2MDf3x/JyclmrbW3efNmk69J4mCYksilS5cAGO/i27u3ap6h1atXY/Xq1TW2bd26Fc8995zV6yPLUSjkGPeEH8Y94QffyDjk3H6Adu4O+MfLvaUujYhEJJPJMH36dNjZ2aFPnz5ca68FYZiSSH1hKiMjQ+RqiIhIDDKZDFOmTJG6DLKwR2OQRhNUX5giask8PT0RExPD7moiajHYMiWR6nX7iB417u7umDp1qtRlEBFZDFumiEhU9+7dw8GDB3Hv3j2pSyEisgiGKSISVW5uLhYvXozc3FypSyEisgiGKSIiIiIBGKaIiIiIBGCYIiIiIhKAYYqIRGVnZ4dOnTrBzs5O6lKIiCyCUyMQkagCAgKwbds2qcsgIrIYtkwRERERCcAwRUSiSklJwcCBA5GSkiJ1KUREFsEwRUSi0uv1qKiogF6vl7oUIiKLYJgiIiIiEoAD0Mk4Ozsov/5U6ipMw7vDiMiCFAoFoqOjLXa+dVu2435xMZydnLDwxadrPbYEhUJhkfOQaRimyCiZTAbY20tdBhGRZGQyGZRKy/2Z1APQ6av+r1Qqaz2m5ov/ekQkKn9/f8TFxcHHx0fqUoiILIJhiohEZW9vj6CgIKnLICKyGA5AJyJR5eXlYcWKFcjLy5O6FCIii2CYIiJRFRYWYseOHSgsLJS6FCIii2CYIiIiIhKAYYqIiIhIAIYpIiIiIgEYpohIVG5ubpgxYwbc3NykLoWIyCIYpohIVHK5HDY2NpDL+fZDRC0D382ISFQajQYffvghNBqN1KUQEVkEwxQRERGRAAxTRERERAIwTBEREREJwDBFRKJydnbGqFGj4OzsLHUpREQWwYWOiUhUPj4+WL58udRlEBFZDFumiEhUZWVlyMrKQllZmdSlEBFZBMMUEYkqPT0d0dHRSE9Pl7oUIiKLYDcfERER1aLX66HVaqUuwyQKhQIymUz06zJMERERUS1arRbx8fFSl2GS6OhoKJXiRxt28xEREREJwDBFREREJAC7+YhIVJ07d8aZM2ekLoOIyGLYMkVEREQkAMMUkUj0ej30er3h60dVZmYmZs6ciczMTKlLISKyCHbzEVlJeYUWO4/+ioTzt3D2qgZJ1+6guKQSAJD7WwkCRm1Hry4e6B3mgYnDOqBTQBtpCxZJSUkJLl++jJKSEqlLISKyCIYpIgvLvV2MzduT8e/4FNzOL61zv4zcImTkFiH+YAb+9q+z+ENfb8ybEoo/DusgyTwpRERkHoYpIgvR6/X4+PtU/HX9adwrqjD5+EOnc3HodC7+0NcbHy0bhA7eXAiYiKg54JgpIgvILyzD6Ln78ec3T5gVpB526HQuuj75PbbtTLNQdUREZE1smSIS6PadEkTO3otLaQUWO2fRgwpMf/04NHfL8Oq0rhY7b1OgUqmwbNkyqFQqqUshIrIItkwRCVB4vxwj5uyzaJB62F/XncYH316zyrml0rp1a0RFRaF169ZSl0JEzUx+fn6TXC+QLVNEAsSsOYWLKflWvcb8lf9Bv25t0S3EzarXEUtBQQEOHjyIyMhIuLq6Sl0OEVnZ3bt3cf36ddy8eROZmZl48OABdDod7OzsoFKpEBAQgKCgIPj6+tZ7841arcby5csRGhqKuXPnQqFQiPgq6scwRWSm3cd/xac7TBvXlBg3Hl4ejlBrHqDPMzsadUxFpQ7PLTmO01+Mh41N829MvnXrFtatW4fw8HCGKaIWSqfT4ZdffsGBAwdw/vz5OufW++WXXwxf+/r6Yvjw4Rg8eDAcHR1r7FcdpPLz83Hy5Em0bdsWTz/9tFVfgyma/ztzM6DRaBAbG4vg4GDY29ujffv2iImJQXFxMWbNmgWZTIZNmzZJXSaZoKxcixeXnzT5OC8PR/i2c4KXh2PDOz/kwrU72Bh3xeTrERGJLT09Ha+99hpWr16Nc+fONXqS4uzsbGzduhXz5s3DoUOHDMc9HKQAwM/PD1FRUVar3xxsmbKypKQkREVFQa1Ww8nJCV26dEFubi42bNiAGzduGH44evToIW2hZJL4AxnIuf1A1Gtu/PIqYqaGQaHgZyAianq0Wi2+++47/PDDDzXGNbm5uWHgwIEICgpCQEAAXF1dIZfL8eDBA2RmZiI9PR3nzp1DSkoKgKqJff/973/j9OnTmDhxIjZu3FgjSC1ZsgQuLi6SvMa6MExZkUajwbhx46BWq7FgwQIsXboUzs5VcwetXbsWixYtglKphEwmQ7du3SSulkzx7varol8zI7cIe09kY+wQP9GvTURUn/LycmzYsAFnz541POfn54dJkyahV69eRsc3ubi4IDw8HOHh4Rg/fjwyMzOxc+dOnDhxAkBVF+ClS5cMLVRNNUgB7OazqpdffhnZ2dmYP38+1q9fbwhSABAbG4vu3bujsrIS/v7+TfKHg4y7mX0PPyfdluTan+28Lsl1LcnR0RF9+/atNSaCiJqnyspK/Otf/zIEKYVCgejoaKxcuRIRERGNHijeoUMHzJ8/H4sWLTLc7VsdpFQqVZMNUgDDlNUkJydj+/bt8PDwwKpVq4zu06tXLwBA9+7dDc8lJCQgMjISKpUKdnZ28PX1xdNPP43k5GRR6qaGnbn0m2TXTrws3bUtxc/PDxs3boSfH1vYiFqC7du349y5cwAAOzs7vPbaa5g8eTKUSvM6v1QqVa27+nQ6Hezt7QXXai0MU1YSFxcHnU6HqVOnolWrVkb3cXBwAFAzTBUUFCA8PBwbNmzA/v37sWbNGly5cgX9+/dHdna2KLVT/c5e0Uh27YzcIty5W/d6f82BVqtFUVFRk5wrhohMk5aWhl27dgEAlEolFi5ciPDwcLPPVz3Y/O7duwAAGxsbAFV3AX/zzTeC67UWhikrOXz4MABg6NChde5THY4eDlPjx4/H22+/jcmTJ2PIkCGYOnUqvvvuOxQWFiI+Pt66RVOjXLlxV9LrX5X4+kKlpaVh2LBhSEvjcjlEzVllZSXee+89Q1fc5MmT0bWr+Ss2GLtr7/XXXze0cO3atQs3btwQXrgVcAC6lWRmZgKo6gM2prKyEidPVt1a/3CYMsbd3R0AzG4y7d27N9RqtVnHUm2/OT8P2Pgb3VY9j1RdvDwcDP/POjCl3uvUNRfVxElTYF/RdMZOTZo0yaT9b9+uGm+2d+9eQ9dAQyZOnGhyXU3NxOdfgVMrF+Sp8+Dr61vrcUv3qL9+oPl9D2xtbescpgIAiYmJyM3NBQAEBQVh7NixZl/LWJCqHiM1efJkxMXFQa/XY8eOHXj11VfrPE9ISAjKy8vNqsHLy6vGAHpTMExZSXFxMYCqWzyN2b59OzQaDZydnREQEFBru1arhU6nQ2ZmJv72t7/By8sLTz31lFm1qNVq5OTkmHUsGRFQBtgY31Q9j1RDlAp5o/Yz5o5GAxQ1nX/P6p/1xqr+nSgpKWn0sS3h51f3325NnVaLnJycWo9bukf99QPN73tgZ2dX7/b9+/cbvp4yZYrZM5LXF6QAYMyYMdizZw8KCwuRmJiI/Px8uLkZXxEiNzcXZWVlZtUhBMOUlXh5eaGgoADnz59H//79a2zLy8vDwoULAQDdunUzOn3+kCFDDC1XwcHBOHz4MDw9Pc2uhSxHYytDXb+qak39c095eThAqZCjUquDWmM8aDd0Lg93F9i19mlMqaJwcjItFFYHKAcHh0Yf6+PTdF6vueT//UMjVyjg4+NT63FL96i/fqD5fQ9sbW3r3Jabm2u4Mcrb29vs7r2GghRQ1SszbNgwfP/999DpdDh27FidrdXe3t6CWqbMxTBlJZGRkUhOTsaaNWswfPhwhISEAKhqFp02bRo0mqpBzHVN1vnRRx/h7t27SE9Px7p16zBixAicPHnSrDugzG22JOMW/vMM1n96yei2hpaIyTowBb7tnKDWlKD98K/Mun7KxSNwa13/J0YxJSYmmrT/tWvXEBcXh6ioKHTu3LlRx7zzzjtmVNa0rHz3C9wrKobKS4Xs7Oxaj1u6R/31A83ve1BZWVnnWN1r1/63APuQIUPqXVOvLo0JUg9f4/vvv6917d9LTU01e0iMEByAbiWxsbFwd3dHVlYWwsLCEB4ejo4dOyIiIgKBgYEYNmwYgLrHS3Xq1Al9+/bFlClTcOjQIdy/fx9r164V8yVQHXp1cZfs2gE+zk0qSJkjODgYP/30E4KDg6UuhYjMlJ6ebvjanN9lU4IUALRr184wV+PNmzcbvUSNWBimrMTX1xcJCQkYM2YM7O3tkZGRATc3N2zZsgW7d+9GamoqgIYHnwNAmzZtEBwcjOvXm86g40dZRLh53a2WubaHZNe2FKVSCVdXV0k+PRKRZWRkZBi+Njbutz6mBikAkMlkCAwMBADcv38fd+7cMb1oK2KYsqLQ0FDs2rUL9+/fx/3793H69GnMnj0bxcXFyMjIgFwub1Q/8+3bt5GSkoKgoCARqqaGBPq6YNBj7SS59vRxHSW5riVlZ2djwYIFTbJbg4gap6ioCEDVmElTVjMwJ0hVq76zHTD9xhdr40dDCVy5cgV6vR4hISG1fgifffZZBAcHo0ePHmjTpg3S0tLw9ttvQ6lU1ns7KIlr7tOhOHHhlqjXDPBxxsgBTW+QqqmKioqQkJCAF154QepSiMhM8+fPx4MHD6DT6Uw67sSJE2YvWjxq1Cj07dsXtra2aNdOmg+0dWGYksClS1WDl4118fXr1w+fffYZ/vWvf6G0tBTt27fH0KFDsXjx4jrnrCLxRQ/3R/t3nJClFu/T0ct/6gKFgo3JRCQ9c3tKoqOjUVRUhKtXr5q81p6fn1+TXYaKYUoC9YWp+fPnY/78+WKXRCaytVFgyxsDMXre/oZ3toDeYR6Y/0wXUa5FRGQtMpkMM2bMQElJSYta7JwfcyVQX5ii5iNqcHvMnBhi0jFqzQNk3ypucD6qh9nayPHJ3x+HUslfVyJq/mQyWYsKUgBbpiRRvW4fNX9vL+yLpGt3cD65cXeWNDQPlTHvLRmIsGBXk49rqjw9PRETE2P2JLRERE0NP+oSCeDSyhb73huJHp2NL20g1IbX+pnc+tXUubu7Y+rUqTXuzCEias4YpogE8nRzwJEPR2Ps4+0tdk6XVjb4cvUTeOlPYRY7Z1Nx7949HDx4EPfu3ZO6FCIii2CYIrKANi522LFxOD5d8TjaONe9nlVjjBroi8vfPYlnRrfMecVyc3OxePFiw2rzRETNHcdMEVmITCbD9PEdMXKgL97/OhkfxKcg93bjB5qPGuiLeVNCMebx9matc0VERNJgmCKysHbuDlj6l55Y/Oce2HMiCyfO38K5qxpcuHYHd+9XrWauUMgQ5OuCXl3c0auLB/44rAOC2jd+vhUiImo6GKaIrMTGRo4JQztgwtD/Tbaq0+mh1ephY8MediKiloJhikhEcrkMcvmj3YVnZ2eHTp06wc7OTupSiIgsgmGKiEQVEBCAbdu2SV0GEZHFsK+BiIiISACGKSISVUpKCgYOHIiUlBSpSyEisgiGKSISlV6vR0VFBfR6vdSlEBFZBMdMERERUS0KhQLR0dEWO9+6Ldtxv7gYzk5OWPji07UeW4JCobDIeUzFMEVERES1yGQyKJWWiwl6ADp91f+VSmWtx80Zu/mIiIiIBGjeUZCImh1/f3/ExcXBx8dH6lKIiCyCYYqIRGVvb4+goJa5iDMRPZrYzUdEosrLy8OKFSuQl5cndSlERBbBMEVEoiosLMSOHTtQWFgodSlERBbBMEVEREQkAMMUERERkQAMU0REREQC8G4+IhKkT58+Ju3v6+uLpUuXIjIyEiqVykpVERGJh2GKiESlUqnw5ptvSl0GEZHFsJuPiIiISACGKSIiIiIBGKaIiIiIBGCYIiIiIhKAYYqIiIhIAIYpIiIiIgEYpoiIiIgEYJgiIiIiEoBhioiIiEgAhikiIiIiARimiIiIiARgmCIiIiISgGGKajl8+DAUCgWCg4OlLoWI6rFnzx706NEDdnZ28Pf3x1tvvSV1SaI6fvw4JkyYgA4dOkAmk2HFihVSlySqdevWoX///nB1dUWbNm0waNAg7Nu3T+qyRLNt2zb06tULrq6ucHBwQGhoKN566y3o9XrRa2GYohrUajVmzJiBESNGSF0KEdXj7NmzmDBhAqKiopCUlIQ333wTixcvxvvvvy91aaIpKipCly5dsHbtWnh5eUldjugOHz6MmTNn4siRIzhz5gwGDBiAsWPH4uTJk1KXJoq2bdvijTfewM8//4wrV67gtddewxtvvIENGzaIXotS9CtSk6XT6fDss89i3rx5KC0tRVpamtQlEVEd3nrrLfTp0werVq0CAISGhuLKlStYvXo15syZI3F14hg9ejRGjx4NAFi0aJHE1Yhv7969NR6vXbsW+/btw3fffYeBAwdKVJV4Ro4cWeNxYGAgfvjhBxw9ehQxMTGi1sIwRQZ///vfIZPJsGjRIixbtkzqcoiapQclpchWa2o9X6nVGv6fmp5d6/HDvNu5o5WjQ73XOXnyJGbNmlXjuVGjRmH9+vXIzs6Gr6+vkJchSHpWHioqtTWeM+X1t3K0h3c7D3GKtYI7Bfdw5+69Ws+b8j0I8vOGQmFa55FOp8O9e/fg5ORkZuWWUVFZifQsda3nTXn9Hm6t4dbaudHX1Ov1SExMxMmTJ7FkyRIB1ZuHYYoAAEeOHMH777+PCxcuQCaTSV0OUbNlZ2uL/ccTka3+zej2ByWl+PjrPXU+bufhivkzJjZ4nby8vFpdW9WP8/LyJA1TubfuYOehn41ua+j1ywC88MxYa5doVQqFHF/+eBClZeVGtzf0PejVNQQhAab/+61cuRJ3797F7NmzTS/agpQKBRIvJuNSSrrR7Q29fidHe7wyc1KjrlVYWAgfHx+Ul5dDp9Nh6dKlePnll4W9ADNwzBRBo9Hg2WefxdatWx/JcQdElqRQyPHU2KFQKhWmHyuvOtZG2bw/5/bvFYbgDj5mHTuoTzcE+nlbuCJxtXFphQnDzetma+PSCuMiB5h83ObNm7Fy5Up8++23kgZpAJDJZPjjyMFwdqq/dbUuT456HM5Ojo3a19nZGUlJSTh79iw2bdqEt956Cx999JFZ1xWCYYpw+fJl5ObmYuzYsVAqlVAqlVi+fDlu3LgBpVKJL7/8UuoSiZqVtu5tMPqJviYfFzmoF3wa2b2lUqmgVtfsSrl165Zhm5TkMhkmjx4Ceztbk45r5+GKEY/3tlJV4urRJRjdOgeadIwMwFNjh5r8fVu/fj0WLlyIHTt2IDIy0qRjrcXJwR6TooaYfFzv8E4I6+jf6P3lcjmCg4PRrVs3zJkzB7GxsXj99ddNvq5QDFOEPn364NKlS0hKSjL8N2fOHLRv3x5JSUkYM2aM1CUSNTv9eoaho3/jW2c6+LTDkL7dG73/wIED8dNPP9V4bt++fejQoYPkLRMA0NqlFf44YlCj91fI5Xh63LBm3ypXTSaT4Y8jBsG5VeNaWABgcEQ3BLY3LQj/3//9H5YtW4Y9e/Y0mSBVrVOQH/r2CG30/q6tnTH2D/0FXVOn06G0tFTQOczRMn5qSRAnJyd07dq1xnNt27aFra1treeJqHHkMhkmjX4C73z8LUpKy+rd19ZGiafGDIVc3vjPt6+++ioGDBiA119/HdOmTcPp06exceNGvP3220JLt5geXYJxNS0Dv1y72eC+wwf3hndbd5POX1RUhOvXrwMAysvLoVarkZSUhFatWjWJefIcHewxOWoIPv5mb4P7enm6YcTgPiad/5VXXsGWLVsQFxeHTp06GVoqHRwc0Lp1a7NqtrQxQ/vhemYO7hTUHpD/MBmAp8Y8YVKr3NKlSzF48GAEBgaioqICx48fx5o1a/D8888LrNp0Mr0Us1tRk/fmm2/i888/N7xREZF5Ll69jridh+vd58lRjyOie2eTz717924sXrwY165dg5eXF2JiYvDXv/7V3FKt4kFJKd75+FvcK3pQ5z7+vl6Y/cxYk8IkABw9ehRDhw6t9fyQIUNw9OhRU0u1mh/2n8CpC1fr3K5QyDF/+kSoTAyTdd0sNGPGDHzyyScmncuafs25hfe+2FHvZJpD+nZHlIld46+++ip27tyJnJwc2NvbIzAwEDNnzsScOXOgUJg+ZlEIhikyyYOSUuTfvQ9flafUpRA1G3E7DuFi8g2j20KD/TD9yZEt+i7a1PTsGndrPczW1gYxz0fDvY2LyFWJp7y8Ahs+/Q6a/EKj26OeiMCQvj3ELUpk+xPO4vDP541u8/J0w/zpE826aaOp4JgpMklC4iVs+ux77D58SupSiJqNCSMGwaVV7bl/nBzs8eSox1t0kAKAkABf9O8ZZnTbuGH9W3SQAqoC49NjhkJu5N/Z39cLg/t0k6Aqcf1hQE/4eNW+uUKhkGPKuGHNOkgBDFNkguKSUvx87jKAqjcAImocR3s7TB5d+84mU24Bb+6inugLT7ea43hCgzugd7dOElUkrvbebTF0wGM1nrO1tcFTY54wuXuzOVIo5Hh6TO0pQ0YO7gMvTzeJqrKcFvMvKJPJDJ/udu7cicGDB8PFxQUeHh6YNGkSbtz4XxP7rl27MGTIELRp0wYuLi6YMGFCvUunlJWV4V//+hcGDBiANm3awN7eHp06dcLChQuh0dSe6RgATp8+jUWLFqFPnz7w8vKCnZ0dfHx88NRTTyExMbHOa+3ZswejR49G27ZtYWNjA3d3d4SGhmLmzJmSr7d0IvESysoroGrrji4dO0haC1Fz0zHAFwN6/a91pld4CMJC/KUrSGS2Nko8NfZ/rTNOjvaIfgRa5R42rH9P+Hr9b4jE+D8MgFsLb5V7WFsPV0QN+d+4qID2KgzqEy5hRZbTYsZMVf9Cbtq0CfPnz4e3tzfatWuHa9euoaSkBD4+Prhw4QK++OILvPrqq1CpVPDy8jJs9/Lywi+//AJPz5pjgW7duoWoqChcuHABcrkc7du3h4uLC1JTU1FWVgY/Pz8cOXIEgYE15xMJDg7GjRs34ObmBpVKBVtbW/z666+4c+cOlEolvvrqK0RHR9c4ZvPmzZg3bx4AwN3dHR06dEBJSQmysrJQVFSEF198UbJFTItLSrH2/TiUlVdg2sQRj9QfASJLKa+oxMZPvkOlVouY56NNnk+oJTh44hwOnjyHaU+OMGk+oZbitzt3seGTeHQM8MW0iSMeqTAJADq9Hh9v34OsvNuImTnJpCVjmrIWF6YcHR3x3nvvYfr06QCA/Px8jBo1ComJiRg7diwOHTqE999/37D9zp07GDlyJM6dO4dFixZh9erVhnPq9XoMHToUx44dw5gxY7Bp0yb4+/sDqLolNyYmBh9//DH69++Pn3+uuXTCZ599hgEDBtS4PVen0+HHH3/E9OnToVQqkZWVhVatWgEAKisr0bZtWxQUFGDz5s2YPXu24W4EvV6PhIQE3LlzBxMnNrzMxO9t/PQ73C8qMfm4h5WVl6OsvAJyubzBNcOIqG5arRZ6VC258SjS6/WoqKiEra2N1KVIpryiEkqFAnL5oxWkqul0Omi1OtjYNK3ZmZxbOeClGU+adWyLC1MvvfQSNmzYUGPbvn37EBUVVef2vXv3YvTo0ejWrRsuXrxoeH7Pnj0YM2YMunbtisTERNjb29c4TqvVIiIiAufPn8eJEycavUr3G2+8gRUrViAuLg5TpkwBAKjVaqhUKri6uiI/P9+0F9+Ale9+gXtFxRY9JxERUUvi0soJi+dNNevYphULLeDPf/5zred69uzZqO03b9acWC4+Ph5A1Zwdvw9SAKBQKDB+/HicP38eR48erRWm0tLS8NVXX+HixYu4c+cOKioqAAC3b98GACQlJRnClKenJ+zt7XH37l0cOHAAw4cPb/RrbohzK2EtSWyVIiKilk7I38oWF6aCgoJqPffwOChj29u2bQugquvuYb/88gsAYOvWrfjhhx+MXq96LaycnJwaz//zn//Ea6+9hsrKyjprvXPnjuFrhUKBmJgYrFmzBiNGjEDPnj0RGRmJQYMGYciQIXBxMX+QornNlsD/xkoBwNQJkRwrRURE9DstrpuvrpdjzvaOHTs2egbwh2ecPXnyJAYNGgSFQoFly5ZhwoQJ8Pf3h5OTE2QyGT7++GPMmjWr1iy1Op0Omzdvxrvvvotr164Znrezs8Of/vQnrF+/Hm5upt9CKmTMFFuliIjoUSBkzFSLa5mypOrB4Tt27MC4ceMafdy2bdsAAAsWLDC6evXDLVIPk8vlmD9/PubPn4/s7GwkJCTgwIED+Prrr7F161ZkZWXhwIEDJr+O+0UlgsdM6XQ6jrsiIiIygmGqHmFhYUhKSsLly5dNClPp6ekAgEGDjK+YfupUw7OH+/r64plnnsEzzzyDBQsWIDw8HAcPHkR6ejoCAgIaXQtgfj8wW6WIiOhRwTFTVjJp0iR88cUX+OCDD/DSSy8ZWqoa4uBQ9Q9SvYL3w9LS0rBr1y6T6ggLC0Pr1q1x9+5d5ObmmhymzGm25FgpIiKixmkxM6Bbw4QJEzBkyBBkZGRgxIgRuHz5co3tOp0O//nPfzBnzpwadwIOHjwYALBq1aoaM69fuXIF48aNM7p0wNWrV/HCCy/g1KlTNcZtabVavPPOO7h79y7s7e0RFmZ8fStL42znREREjcMB6A1s12g0mDBhgmFSzg4dOsDLywslJSW4ceMGiourxhElJyejc+fOAID79++jZ8+euH79OmxsbNCpUyfodDokJydDpVJh7ty5WLJkSY0B6ElJSXjssap1m5ydnREUFASFQoGMjAzDGKvNmzfjL3/5i1nfH1NwtnMiIqLGY8tUAzw8PHDs2DF88sknGD58OIqLi3H27Fmkp6cjODgYMTExOHbsGEJCQgzHODs748SJE5g5cyZcXV2RkpJiWA7m/Pnz8PHxqXWdkJAQfPjhh3j66aehUqlw8+ZNXLx4Efb29pg8eTISEhJECVIAUFpWDj/vtmyVIiIiaoQW0zJFlldaVv5Irh1GRERkCoYpIiIiIgHYzUdEREQkAMMUERERkQAMU0REREQCMEwRERERCcAwRURERCQAwxQRERGRAAxTRERERAIwTBEREREJwDBFREREJADDFBEREZEADFNEREREAjBMEREREQnAMEVEREQkAMMUERERkQAMU0REREQCMEwRERERCcAwRURERCQAwxQRERGRAAxTRERERAIwTBEREREJwDBFREREJADDFBEREZEADFNEREREAjBMEREREQnAMEVEREQkAMMUERERkQAMU0REREQCMEwRERERCcAwRURERCQAwxQRERGRAAxTRERERAIwTBEREREJwDBFREREJADDFBEREZEADFNEREREAjBMEREREQnAMEVEREQkAMMUERERkQAMU0REREQC/H9L31QGxgyb+AAAAABJRU5ErkJggg==" }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "circuit2 = QuantumCircuit.from_qasm_str(qasm_str)\n", "circuit2.draw('mpl')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.13" } }, "nbformat": 4, "nbformat_minor": 4 }